package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ICrmMemberDAO;
import org.jsola.hr.dto.CrmMemberAddDTO;
import org.jsola.hr.dto.CrmMemberAndCustomerAddDTO;
import org.jsola.hr.dto.CrmMemberUpdateDTO;
import org.jsola.hr.entity.CrmMemberDO;
import org.jsola.hr.query.CrmMemberQuery;
import org.jsola.hr.query.HrUserQuery;
import org.jsola.hr.vo.CrmMemberListVO;
import org.jsola.hr.vo.CrmMemberVO;
import org.jsola.hr.vo.HrUserVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 成员表
 *
 * @author zhr
 */
public interface ICrmMemberService extends IService<ICrmMemberDAO, CrmMemberDO> {

    /**
     * 添加权限范围
     * @param tokenUser 当前用户
     * @return list
     */
    List<CrmMemberVO> getMyManagerList(TokenUser tokenUser);


    /**
     * 添加权限范围
     * @param crmMemberQuery 更新
     * @param tokenUser 当前用户
     * @return list
     */
    Void addRange(CrmMemberQuery crmMemberQuery, TokenUser tokenUser);

    /**
     * 获取自己下属的客户主管信息
     * @param memberId 成员表id
     * @param tokenUser 当前用户
     * @return 下属客户主管列表
     */
    List<CrmMemberVO> getMyManager(String memberId, TokenUser tokenUser);
    /**
     *
     * 获取用户（新增权限使用）
     * @param crmMemberQuery 查询参数
     * @param tokenUser 当前用户
     * @return user实体
     *
     */
    List<CrmMemberVO> getAllUser(CrmMemberQuery crmMemberQuery, TokenUser tokenUser);

    /**
     *
     * 权限范围列表（客户主管和没有权限的）
     * @param tokenUser 当前用户
     * @param hrUserQuery 查询参数
     * @return page
     *
     */
    List<HrUserVO> getJurisdictionRange(HrUserQuery hrUserQuery, TokenUser tokenUser);

    /**
     * 根据userId查询手机号
     * @param tokenUser 当前用户
     * @param crmMemberListVOPage page
     * @return page
     */
    Page<CrmMemberListVO> getUserPhone(Page<CrmMemberListVO> crmMemberListVOPage, TokenUser tokenUser);

    /**
     * 权限验证
     * @param tokenUser 当前用户
     * @param type 1客户经理2客户主管
     * @return 更新数量
     */
    Boolean permissionVerification(TokenUser tokenUser, int type);

    /**
     * 配置权限
     * @param crmMemberQuery 成员表
     * @return 更新数量
     */
    Integer updateJurisdiction(CrmMemberQuery crmMemberQuery, TokenUser tokenUser);

    /**
     * 成员新增权限并且分配客户
     * @param crmMemberAndCustomerAddDTO 成员表新增实体
     * @return 成员表展示对象
     */
    CrmMemberVO addJurisdiction(CrmMemberAndCustomerAddDTO crmMemberAndCustomerAddDTO, TokenUser tokenUser);

    /**
     * 新增成员表
     * @param crmMemberAddDTO 新增成员表DTO
     * @param tokenUser 当前用户
     * @return 成员表详情信息
     */
    CrmMemberVO save(CrmMemberAddDTO crmMemberAddDTO, TokenUser tokenUser);

    /**
     * 修改成员表
     * @param crmMemberUpdateDTO 修改成员表DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(CrmMemberUpdateDTO crmMemberUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除成员表，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param crmMemberIds 成员表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...crmMemberIds);

    /**
     * 根据成员表id查找
     * @param crmMemberId 成员表id
     * @return 成员表详情信息
     */
    CrmMemberVO selectByIdNotSiteId(String crmMemberId);

    /**
     * 根据成员表id查找
     * @param crmMemberId 成员表id
     * @param siteId 所属站点id
     * @return 成员表详情信息
     */
    CrmMemberVO selectById(String crmMemberId, String siteId);

    /**
     * 查询成员表
     * @param crmMemberQuery 查询条件
     * @param siteId 所属站点id
     * @return 成员表列表信息
     */
    List<CrmMemberListVO> select(CrmMemberQuery crmMemberQuery, String siteId);

    /**
    * 查询成员表记录数
    * @param crmMemberQuery 查询条件
    * @param siteId 所属站点id
    * @return 成员表记录数
    */
    int selectCount(CrmMemberQuery crmMemberQuery, String siteId);

    /**
     * 分页查询成员表
     * @param crmMemberQuery 查询条件
     * @param siteId 所属站点id
     * @return 成员表列表信息
     */
    Page<CrmMemberListVO> selectPage(CrmMemberQuery crmMemberQuery, String siteId);


    /**
     * 根据成员表id查找
     * @param crmMemberId 成员表id
     * @param siteId 所属站点id
     * @return 成员表
     */
    CrmMemberDO selectDOById(String crmMemberId, String siteId);

    /**
     * 查询成员表
     * @param crmMemberQuery 查询条件
     * @param siteId 所属站点id
     * @return 成员表列表
     */
    List<CrmMemberDO> selectDO(CrmMemberQuery crmMemberQuery, String siteId);




}


